//import { showModal, showToast } from './feedback'; // 假设你已封装了交互反馈

/**
 * 封装微信小程序权限管理
 */
class PermissionManager {
  /**
   * 检查指定权限的状态
   * @param scope 权限作用域，例如 'scope.userLocation', 'scope.camera'
   * @returns Promise<boolean> true 表示已授权，false 表示未授权或拒绝
   */
  async checkPermission(scope: string): Promise<boolean> {
    try {
      const res = await wx.getSetting();
      return res.authSetting[scope] === true;
    } catch (e: any) {
      console.error(`检查权限 ${scope} 失败:`, e);
      return false;
    }
  }

  /**
   * 请求指定权限
   * @param scope 权限作用域
   * @param permissionName 权限的友好名称，用于提示用户
   * @returns Promise<boolean> true 表示授权成功，false 表示授权失败或用户拒绝
   */
  async requestPermission(scope: string, permissionName: string = ''): Promise<boolean> {
    const authorized = await this.checkPermission(scope);
    if (authorized) {
      return true;
    }

    try {
      const res = await wx.authorize({ scope });
      return res.errMsg === 'authorize:ok';
    } catch (e: any) {
      if (e.errMsg === 'authorize:fail auth deny') {
        // 用户拒绝了授权，引导用户到设置页
        return this.guideUserToSetting(scope, permissionName);
      } else {
        console.error(`请求权限 ${scope} 失败:`, e);
        showToast('请求权限失败，请稍后再试', 'error');
        return false;
      }
    }
  }

  /**
   * 引导用户到设置页开启权限
   * @param scope 权限作用域
   * @param permissionName 权限的友好名称
   * @returns Promise<boolean> true 表示用户在设置页成功授权，false 表示用户未授权或取消
   */
  private async guideUserToSetting(scope: string, permissionName: string): Promise<boolean> {
    const content = `检测到您未开启${permissionName}权限，是否前往设置页开启？`;
    const confirm = await showModal('权限申请', content, true);

    if (confirm) {
      try {
        const settingRes = await wx.openSetting();
        return settingRes.authSetting[scope] === true;
      } catch (e: any) {
        console.error(`打开设置页失败:`, e);
        showToast('打开设置页失败，请手动前往开启', 'error');
        return false;
      }
    } else {
      showToast('您取消了授权', 'none');
      return false;
    }
  }

  /**
   * 请求地理位置权限
   * @returns Promise<boolean>
   */
  async requestLocationPermission(): Promise<boolean> {
    return this.requestPermission('scope.userLocation', '地理位置');
  }

  /**
   * 请求相机权限
   * @returns Promise<boolean>
   */
  async requestCameraPermission(): Promise<boolean> {
    return this.requestPermission('scope.camera', '相机');
  }

  /**
   * 请求写入相册权限
   * @returns Promise<boolean>
   */
  async requestWritePhotosAlbumPermission(): Promise<boolean> {
    return this.requestPermission('scope.writePhotosAlbum', '保存到相册');
  }

  // 可以添加其他常用权限的封装
}

export const permission = new PermissionManager();
